package com.sd.repay.service;


import com.sd.repay.common.CommonResult;
import com.sd.repay.pojo.Balance;
import com.sd.repay.pojo.BalanceHis;

import java.math.BigDecimal;
import java.util.Map;

/**
 * Created by sd on 2018/08/21
 * 用户余额Service接口
 */
public interface BalanceOperService {

    /**
     * 根据初始化的余额流水变动余额
     *
     * @param merNo          业务商户编号
     * @param merType        业务商户编号
     * @param amount         变动金额
     * @param transType      金额变动类型  IN钱包入账   OUT钱包出账
     * @param balanceType    操作余额类型 curr_balance：今日余额；his_balance：历史余额；freeze_balance：冻结金额'
     * @param service        变动来源业务 0：交易；1：提现；2：冲正；3：调账；4：分润'
     * @param serviceOrderNo 变动来源业务单号
     * @param remark         备注
     * @param balanceChannel 余额通道类型  代付余额：DaiFu
     * @return
     * @throws Exception
     */
    CommonResult updateBalance(String merNo, String merType, BigDecimal amount, String transType, String balanceType, String service, String serviceOrderNo, String remark, String balanceChannel) throws Exception;

    /**
     * 以事务方式插入余额流水明细
     *
     * @param insertBalanceHis
     * @return
     * @throws Exception
     */
    Long insertBalanceHisInTransactionalResId(BalanceHis insertBalanceHis) throws Exception;

    /**
     * 根据用户和通道查询余额（通道为空则查询总余额）
     *
     * @param merNo
     * @param merType
     * @param balanceChannel
     * @return
     */
    Map<String, Object> getBalanceByMerAndChannel(String merNo, String merType, String balanceChannel) throws Exception;

    /**
     * 根据用户和通道查询账户信息
     *
     * @param merNo
     * @param merType
     * @param balanceChannel
     * @return
     */
    Balance getAccountByMerAndChannel(String merNo, String merType, String balanceChannel) throws Exception;

    /**
     * 冻结通道账户
     *
     * @param merNo
     * @param merType
     * @param amountBig
     * @param balanceChannel
     * @return
     * @throws Exception
     */
    int freezeBalance(String merNo, String merType, BigDecimal amountBig, String balanceChannel) throws Exception;

    /**
     * 解冻通道账户
     *
     * @param merNo
     * @param merType
     * @param balanceChannel
     * @return
     * @throws Exception
     */
    int unfreezeBalance(String merNo, String merType, String balanceChannel) throws Exception;
}
